home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Graphics⁄Sound / PICTS to Movie / QuickTime Includes / MoviesFormat.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-02  |  11.9 KB  |  506 lines  |  [TEXT/MPS ]

  1.  
  2. /************************************************************
  3.  
  4. Created: Wednesday, August 28, 1991 at 1:56 AM
  5.  MoviesFormat.h
  6.  C Interface to the Macintosh Libraries
  7.  
  8.  
  9.   Copyright Apple Computer, Inc. 1991
  10.   All rights reserved
  11.  
  12. ************************************************************/
  13.  
  14.  
  15. #ifndef __MOVIESFORMAT__
  16. #define __MOVIESFORMAT__
  17.  
  18. #ifndef __MOVIES__
  19. #include <Movies.h>
  20. #endif
  21.  
  22. #define kMovieVersion    (0)                /* version number of the format here described */
  23.  
  24. struct MoviesUserData {
  25.     long        size;                        /* size of this user data */
  26.     long        type;                        /* type of user data */
  27.     char         data[1];                    /* the user data */
  28. };
  29. typedef struct MoviesUserData MoviesUserData;
  30.  
  31. struct UserDataAtom {
  32.     long             size;
  33.     long            type;
  34.     MoviesUserData    userData[1];
  35. };
  36. typedef struct UserDataAtom UserDataAtom;
  37.  
  38. /*
  39. struct SampleDescription {
  40.     long        size;
  41.     long        type;
  42.     long        resvd1;
  43.     short        resvdA;
  44.     short        dataRefBlobId;
  45.     };
  46. typedef struct SampleDescription SampleDescription;
  47. */
  48.  
  49. struct SampleDescriptionAtom {
  50.     long        size;
  51.     long        type;                            /* = 'stsd' */
  52.     long        flags;                            /* 1 byte of version / 3 bytes of flags */
  53.     long        numEntries;
  54.     SampleDescription    sampleDescTable[1];
  55. };
  56. typedef struct SampleDescriptionAtom SampleDescriptionAtom;
  57.  
  58. struct TimeToSampleNum {
  59.     long        sampleCount;
  60.     TimeValue    sampleDuration;
  61. };
  62. typedef struct TimeToSampleNum TimeToSampleNum;
  63.  
  64. struct TimeToSampleNumAtom {
  65.     long        size;
  66.     long        type;                            /* = 'stts' */
  67.     long        flags;                            /* 1 byte of version / 3 bytes of flags */
  68.     long        numEntries;
  69.     TimeToSampleNum    timeToSampleNumTable[1];
  70. };
  71. typedef struct TimeToSampleNumAtom TimeToSampleNumAtom;
  72.  
  73. struct SyncSampleAtom{
  74.     long        size;
  75.     long        type;                                /* = 'stss' */
  76.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  77.     long        numEntries;
  78.     long        syncSampleTable[1];
  79. };
  80. typedef struct SyncSampleAtom SyncSampleAtom;
  81.  
  82. struct SampleToChunk {
  83.     long        firstChunk;
  84.     long        samplesPerChunk;
  85.     long        sampleDescriptionID;
  86. };
  87. typedef struct SampleToChunk SampleToChunk;
  88.  
  89. struct SampleToChunkAtom {
  90.     long        size;
  91.     long        type;                                /* = 'stsc' */
  92.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  93.     long        numEntries;
  94.     SampleToChunk    sampleToChunkTable[1];
  95. };
  96. typedef struct SampleToChunkAtom SampleToChunkAtom;
  97.  
  98. struct ChunkOffsetAtom {
  99.     long        size;
  100.     long        type;                                /* = 'stco' */
  101.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  102.     long        numEntries;
  103.     long        chunkOffsetTable[1];
  104. };
  105. typedef struct ChunkOffsetAtom ChunkOffsetAtom;
  106.  
  107. struct SampleSizeAtom {
  108.     long        size;
  109.     long        type;                                /* = 'stsz' */
  110.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  111.     long        sampleSize;
  112.     long        numEntries;
  113.     long        sampleSizeTable[1];
  114. };
  115. typedef struct SampleSizeAtom SampleSizeAtom;
  116.  
  117. struct SampleTableAtom {
  118.     long        size;
  119.     long        type;            /* = 'stbl' */
  120.  
  121.     SampleDescriptionAtom    sampleDescription;
  122.     TimeToSampleNumAtom        timeToSampleNum;
  123.     SampleToChunkAtom        sampleToChunk;
  124.     SyncSampleAtom            syncSample;
  125.     SampleSizeAtom            sampleSize;
  126.     ChunkOffsetAtom            chunkOffset;
  127.     
  128. };
  129. typedef struct SampleTableAtom SampleTableAtom;
  130.  
  131.     
  132. struct PublicHandlerInfo {
  133.     long                flags;                                /* 1 byte of version / 3 bytes of flags */
  134.     long                componentType;
  135.     long                componentSubType;
  136.     long                componentManufacturer;
  137.     long                componentFlags;
  138.     long                componentFlagsMask;
  139.     char                componentName[1];
  140.     
  141. };
  142. typedef struct PublicHandlerInfo PublicHandlerInfo;
  143.     
  144. struct HandlerAtom {
  145.     long                size;
  146.     long                type;                            /* = 'hdlr' */
  147.     
  148.     PublicHandlerInfo    hInfo;    
  149. };
  150. typedef struct HandlerAtom HandlerAtom;
  151.     
  152.     
  153. struct DataRefAtom {
  154.     long                size;
  155.     long                type;
  156.     
  157.     long                flags;                    /* 1 byte of version / 3 bytes of flags (contains the dataRef attributes) */
  158.     char                dataRefData[1];            /* for the current data handlers, this is an alias */
  159. };
  160. typedef struct DataRefAtom DataRefAtom;
  161.  
  162. struct DataRefContainerAtom {
  163.     long                size;
  164.     long                type;
  165.     
  166.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  167.     long                numEntries;
  168.     DataRefAtom            dataRefs[1];
  169. };
  170. typedef struct DataRefContainerAtom DataRefContainerAtom;
  171.  
  172. struct DataInfoAtom {
  173.     long                    size;
  174.     long                    type;                            /* = 'dinf' */
  175.     DataRefContainerAtom    dataRef;
  176. };
  177. typedef struct DataInfoAtom DataInfoAtom;
  178.  
  179. struct MatteCompressedAtom {
  180.     long                size;
  181.     long                type;
  182.     
  183.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  184.     ImageDescription    matteImageDescription;
  185.     char                matteData[1];
  186. };
  187. typedef struct MatteCompressedAtom MatteCompressedAtom;
  188.  
  189. struct MatteAtom {
  190.     long                size;
  191.     long                type;
  192.     
  193.     MatteCompressedAtom    aCompressedMatte;
  194. };
  195. typedef struct MatteAtom MatteAtom;
  196.  
  197. struct RgnAtom {
  198.     long        size;
  199.     long        type;
  200.     
  201.     short        rgnSize;                                /* this is the contents of a region */
  202.     Rect        rgnBBox;
  203.     char        data[1];
  204. };
  205. typedef struct RgnAtom RgnAtom;
  206.  
  207. struct ClippingAtom {
  208.     long        size;
  209.     long        type;
  210.     
  211.     RgnAtom        aRgnClip;
  212. };
  213. typedef struct ClippingAtom ClippingAtom;
  214.     
  215. struct VideoMediaInfoHeader {
  216.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  217.     short                graphicsMode;                    /* for QD - transfer mode */
  218.     short                opColorRed;                        /* opcolor for transfer mode */
  219.     short                opColorGreen;
  220.     short                opColorBlue;
  221.     
  222. };
  223. typedef struct VideoMediaInfoHeader VideoMediaInfoHeader;
  224.  
  225.  
  226. struct VideoMediaInfoHeaderAtom {
  227.     long                size;                            /* size of Media info */
  228.     long                type;                            /* = 'vmhd' */
  229.     VideoMediaInfoHeader    vmiHeader;
  230. };
  231. typedef struct VideoMediaInfoHeaderAtom VideoMediaInfoHeaderAtom;
  232.  
  233. struct VideoMediaInfo {
  234.     long                size;                            /* size of Media info */
  235.     long                type;                            /* = 'minf' */
  236.     VideoMediaInfoHeaderAtom    header;
  237.     HandlerAtom            dataHandler;
  238.     DataInfoAtom        dataInfo;
  239.     SampleTableAtom        sampleTable;
  240. };
  241. typedef struct VideoMediaInfo VideoMediaInfo;
  242.  
  243.         
  244. struct SoundMediaInfoHeader {
  245.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  246.  
  247.      short                balance;                
  248.     short                rsrvd;
  249.     
  250. };
  251. typedef struct SoundMediaInfoHeader SoundMediaInfoHeader;
  252.  
  253. struct SoundMediaInfoHeaderAtom {
  254.     long                size;                            /* size of Media info */
  255.     long                type;                            /* = 'vmhd' */
  256.     
  257.     SoundMediaInfoHeader    smiHeader;    
  258. };
  259. typedef struct SoundMediaInfoHeaderAtom SoundMediaInfoHeaderAtom;
  260.  
  261. struct SoundMediaInfo {
  262.     long                size;                            /* size of Media info */
  263.     long                type;                            /* = 'minf' */
  264.     
  265.     SoundMediaInfoHeaderAtom    header;
  266.     
  267.     HandlerAtom            dataHandler;
  268.     
  269.     DataRefAtom            dataReference;
  270.     
  271.     SampleTableAtom        sampleTable;
  272. };
  273. typedef struct SoundMediaInfo SoundMediaInfo;
  274.  
  275. struct MediaInfo {
  276.     long            size;
  277.     long            type;
  278.     
  279.     /* whatever data the media handler needs goes here */
  280. };
  281. typedef struct MediaInfo MediaInfo;
  282.  
  283.  
  284. /***********************
  285. * Media Directory Structures 
  286. ***********************/    
  287.  
  288. struct MediaHeader {
  289.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  290.     
  291.     long                creationTime;                    /* seconds since Jan 1904 when directory was created */
  292.     long                modificationTime;                /* seconds since Jan 1904 when directory was appended */
  293.  
  294.     TimeValue            timeScale;                        /* start time for Media (Media time) */
  295.     TimeValue            duration;                        /* length of Media (Media time) */
  296.  
  297.     short                language;
  298.     short                quality;
  299. };
  300. typedef struct MediaHeader MediaHeader;
  301.  
  302. struct MediaHeaderAtom {
  303.     long         size;
  304.     long        type;            
  305.     
  306.     MediaHeader    header;
  307. };
  308. typedef struct MediaHeaderAtom MediaHeaderAtom;
  309.  
  310. struct MediaDirectory {
  311.     long                size;
  312.     long                type;                            /* = 'mdia' */
  313.     
  314.     MediaHeaderAtom            mediaHeader;                /* standard Media information */
  315.  
  316.     HandlerAtom            mediaHandler;
  317.  
  318.     MediaInfo            mediaInfo;
  319. } ;
  320. typedef struct MediaDirectory MediaDirectory;
  321.  
  322.  
  323. /***********************
  324. * Track Structures 
  325. ***********************/    
  326.     
  327. enum {
  328.     TrackEnable = 1<<0,
  329.     TrackInMovie = 1<<1,
  330.     TrackInPreview = 1<<2,
  331.     TrackInPoster = 1<<3
  332.     };
  333.     
  334. struct TrackHeader {
  335.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  336.  
  337.     long                creationTime;                    /* seconds since Jan 1904 when directory was created */
  338.     long                modificationTime;                /* seconds since Jan 1904 when directory was appended */
  339.  
  340.     long                trackID;
  341.  
  342.     long                reserved1;
  343.  
  344.     TimeValue            duration;                        /* length of track (track time) */
  345.  
  346.     long                reserved2;
  347.     long                reserved3;
  348.  
  349.     short                layer;
  350.     short                alternateGroup;
  351.  
  352.     short                volume;
  353.     short                reserved4;
  354.  
  355.     MatrixRecord        matrix;
  356.     Fixed                trackWidth;
  357.     Fixed                trackHeight;
  358.         
  359. } ;
  360. typedef struct TrackHeader TrackHeader;
  361.  
  362. struct TrackHeaderAtom {
  363.     long                size;                            /* size of track header */
  364.     long                type;                            /* = 'tkhd' */
  365.         
  366.     TrackHeader        header;
  367. };
  368. typedef struct TrackHeaderAtom TrackHeaderAtom;
  369.  
  370. struct EditListType {
  371.     TimeValue        trackDuration;
  372.     TimeValue        mediaTime;
  373.     Fixed            mediaRate;
  374. };
  375. typedef struct EditListType EditListType;
  376.  
  377. struct EditListAtom {
  378.     long                size;
  379.     long                type;                            /* = elst */
  380.     
  381.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  382.  
  383.     long                numEntries;
  384.     EditListType        editListTable[1];
  385. };
  386. typedef struct EditListAtom EditListAtom;
  387.  
  388. struct EditsAtom {
  389.     long            size;
  390.     long            type;                                /* = edts */
  391.     
  392.     EditListAtom    editList;
  393. };
  394. typedef struct EditsAtom EditsAtom;
  395.  
  396. struct TrackDirectory {
  397.     long                size;
  398.     long                type;                            /* = 'trak' */
  399.  
  400.     TrackHeaderAtom        trackHeader;                    /* standard track information */
  401.  
  402.     ClippingAtom        trackClip;
  403.  
  404.     EditsAtom            edits;
  405.     
  406.     MediaDirectory        media;
  407.     
  408.      UserDataAtom        userData;                        /* space for extending with new data types */
  409. } ;
  410. typedef struct TrackDirectory TrackDirectory;
  411.  
  412. struct MovieHeader {
  413.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  414.  
  415.     long                creationTime;                    /* seconds since Jan 1904 when directory was created */
  416.     long                modificationTime;                /* seconds since Jan 1904 when directory was appended */
  417.  
  418.     /* Time specifications */
  419.     TimeValue            timeScale;
  420.     TimeValue            duration;
  421.     Fixed                preferredRate;                    /* rate at which to play this movie */
  422.  
  423.     short                preferredVolume;                /* volume to play movie at */
  424.     short                reserved1;            
  425.  
  426.     /* Graphics specifications */
  427.     long                reserved2;                    
  428.     long                reserved3;                    
  429.  
  430.     MatrixRecord        matrix;
  431.     
  432.     TimeValue            previewTime;                    /* time in track the proxy begins (track time) */
  433.     TimeValue            previewDuration;                /* how long the proxy lasts (track time) */
  434.     TimeValue            posterTime;                        /* time in track the proxy begins (track time) */
  435.     TimeValue            selectionTime;                    /* time in track the proxy begins (track time) */
  436.     TimeValue            selectionDuration;                /* time in track the proxy begins (track time) */
  437.     TimeValue            currentTime;                    /* time in track the proxy begins (track time) */
  438.     long                 nextTrackID;                    /* next value to use for a TrackID */
  439.  
  440. };
  441. typedef struct MovieHeader MovieHeader;
  442.  
  443. struct MovieHeaderAtom {
  444.     long                size;
  445.     long                type;                            /* = 'mvhd' */
  446.     MovieHeader         header;
  447. };
  448. typedef struct MovieHeaderAtom MovieHeaderAtom;
  449.  
  450. struct MovieDirectory {
  451.     long                size;
  452.     long                type;                            /* = 'moov' */
  453.     MovieHeaderAtom        header;
  454.     ClippingAtom        movieClip;                
  455.     
  456.     /* Track Directories */
  457.     struct {
  458.         TrackDirectory  trackDirectory;                 /* Track directory information */    
  459.         }                 track[1];
  460.          
  461.      /* User data for Movie */
  462.      UserDataAtom        userData;                        /* space for user extensions */
  463.      
  464. };
  465. typedef struct MovieDirectory MovieDirectory;
  466. /* Movie formats and tags */
  467.     /* some system defined format IDs */
  468.     #define    MOVIE_TYPE        'moov'
  469.     #define TRACK_TYPE        'trak'
  470.     #define MEDIA_TYPE        'mdia'
  471.     #define VIDEO_TYPE        'vide'
  472.     #define SOUND_TYPE        'soun'
  473.  
  474.  
  475. /* atom id's */
  476.     #define MovieAID                'moov'
  477.     #define MovieHeaderAID            'mvhd'
  478.     #define ClipAID                    'clip'
  479.     #define RgnClipAID                'crgn'
  480.     #define MatteAID                'matt'
  481.     #define MatteCompAID            'kmat'
  482.     #define TrackAID                'trak'
  483.     #define    UserDataAID                'udta'
  484.     #define    TrackHeaderAID            'tkhd'
  485.     #define EditsAID                'edts'
  486.     #define EditListAID                'elst'
  487.     #define MediaAID                'mdia'
  488.     #define MediaHeaderAID            'mdhd'
  489.     #define    MediaInfoAID            'minf'
  490.     #define VideoMediaInfoHeaderAID    'vmhd'
  491.     #define SoundMediaInfoHeaderAID    'smhd'
  492.     #define DataInfoAID                'dinf'
  493.     #define DataRefAID                'dref'
  494.     #define SampleTableAID            'stbl'
  495.     #define STSampleDescAID            'stsd'
  496.     #define STTimeToSampAID            'stts'
  497.     #define STSyncSampleAID            'stss'
  498.     #define STSampleToChunkAID        'stsc'
  499.     #define HandlerAID                'hdlr'
  500.     #define STSampleSizeAID            'stsz'
  501.     #define STChunkOffsetAID        'stco'
  502.     #define DataRefContainerAID     'drfc'
  503.     
  504.  
  505. #endif __MOVIESFORMAT__
  506.